<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>04 applay.call.bind</title>
</head>

<body>

    <pre>
        经典面试题 必考题目 javascript中apply、call和bind的区别???

        相似点：    
                1、都是用来改变函数的this对象的指向的。
                2、第一个参数都是this要指向的对象。
                3、都可以利用后续参数传参。

        区别：
                call apply 参数不一样，   call(this,a,b,c)   apply(this,[a,b,c])
                bind 返回的是一个新的函数，你必须调用它才会被执行。 bind(this,a,b,c)()
    </pre>


    <script>
        var xiaoming = {
            name: '小明',
            gender: '男',
            age: 17,
            say: function() {
                console.log(this.name + ',' + this.gender + ',' + this.age);
            }
        }

        var xiaohong = {
            name: '小红',
            gender: '女',
            age: 16
        }

        xiaoming.say();
        xiaoming.say.call(xiaohong);
        xiaoming.say.apply(xiaohong);
        xiaoming.say.bind(xiaohong)();


        var xw = {
            name: "小王",
            age: 8,
            say: function(school, grade) {
                console.log("我叫:", this.name + "我今年:" + this.age + "我的学校:" + school + "我的年级:" + grade);
            }
        }

        var xm = {
            name: "小明",
            age: 7
        }

        // xw.say("清华实验小学1","二年级");
        // xw.say.call(xm,"清华实验小学2","一年级");
        // xw.say.apply(xm,["清华实验小学3","三年级"]);
        // xw.say.bind(xm,"清华实验小学4","五年级")();
    </script>
</body>

</html>